
#################################################################################
function Show-Server
{
	param($server)
	
	Log-Message "    " $server.FQName - $server.Volume
	Log-Message "       Applications:"
	foreach( $app in $server.Applications )
	{
		Log-Message "          " $app.Name - $app.Type
	}
}

#################################################################################
function Show-Env
{
  param ($env)
	Log-Message $MinorLine
	Log-Message $env.Name
	foreach( $Server in $env.Servers )
	{
		Show-Server $Server
	}
}

#################################################################################
function Show-AllEnv
{
	Log-Message "All Production Environments"
	foreach ( $env in $AllEnv )
	{
		Show-Env $env
	}	
}

#################################################################################
function Get-Env
{
	param ($envName)
	
	foreach ( $env in $AllEnv )
	{
		if ($env.Name -eq $envName)
		{
			$env
			return
		}
	}	
	Throw Log-Message "Get-Env Failed to find '$envName'" -Foregroundcolor Red
}

#################################################################################
function Get-Server
{
	param ($serverName, $local_env = $Env)
	
	foreach ( $server in $local_env.Servers )
	{
		if ($server.Name -eq $serverName)
		{
			$server
			return
		}
	}	
	Throw Log-Message "Get-Server Failed to find '$serverName'" -Foregroundcolor Red
}

#################################################################################
function Get-App
{
	param ($server, $appname)
	
	foreach ( $app in $server.Applications )
	{
		if ($app.Name -eq $appname)
		{
			return $app
		}
	}	
  return $null	
}

#################################################################################
function Get-CustomApp
{
	param ($EnvName, $appname)
	
  foreach( $custApp in $Global:custApps )
  {
    if ($custApp.Name -eq $appname)
    {
        if ($custApp.environments[$EnvName] -ne $null)
        {
        	return $custApp
        }
    }
  }
	return $null
}

#################################################################################
function Get-dbDeployment
{
	param ($EnvName, $appname)
	
  foreach( $dbDeployment in $Global:dbDeployments )
  {
    if ($dbDeployment.Name -eq $appname)
    {
        if ($dbDeployment.environments[$EnvName] -ne $null)
        {
	        return $dbDeployment
        }
    }
  }
	return $null
}


#################################################################################
function Set-ServerApplication
{
	param($local_env, $serverName, $app)
	
	$server = Get-Server $serverName $local_env
	$server.Applications += $app
}
#################################################################################
function check-Access
{
  $regexp = '^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"'
	foreach ($serverCollection in $env)
	{
	  
	  foreach ($serverItem in $serverCollection.Servers)
	  {
			$domain = $serverItem.domain
			if (!($serverItem.Name -match $regexp ) -and ([system.string]::IsNullOrEmpty($domain)))
		{
		    [system.IO.DirectoryInfo]$Path =  "\\$($serverItem.Name).$($serverItem.domain)\$($serverItem.volume)"
		}
		else 
		{
		  [system.IO.DirectoryInfo]$Path =  "\\$($serverItem.Name)\$($serverItem.volume)"
		}
		Retry "Map Drive" {Assure-PathAccess $Path $domain} -AllowSkip
	  }
	}
}
